Publish/Subscribe মডেল ব্যবহার করে সংবাদ প্রচার সিস্টেম তৈরি করা একটি কার্যকর এবং সাধারণ উপায় যেখানে একাধিক পাঠক (Subscriber) বিভিন্ন সংবাদ টপিক সাবস্ক্রাইব করে এবং সংবাদ প্রকাশক (Publisher) থেকে সংবাদ পায়। ZeroMQ ব্যবহার করে এই ধরনের সিস্টেম সহজেই তৈরি করা যায়, কারণ ZeroMQ-এর PUB-SUB প্যাটার্ন এই মডেলের জন্য আদর্শ।
Publish/Subscribe মডেলে সংবাদ প্রচার সিস্টেমের বৈশিষ্ট্য
- মাল্টিকাস্ট মেসেজিং:
- সংবাদ প্রকাশক (Publisher) একবার সংবাদ পাঠালে একাধিক পাঠক (Subscriber) সেটি গ্রহণ করতে পারে। এটি মাল্টিকাস্ট মেসেজিংয়ের মাধ্যমে কাজ করে।
- টপিক-ভিত্তিক সাবস্ক্রিপশন:
- পাঠকরা নির্দিষ্ট টপিক সাবস্ক্রাইব করতে পারে, যেমন
sports,politics,weatherইত্যাদি। এর মাধ্যমে তারা শুধু নির্দিষ্ট টপিকের সংবাদই গ্রহণ করবে।
- পাঠকরা নির্দিষ্ট টপিক সাবস্ক্রাইব করতে পারে, যেমন
- ডিসেন্ট্রালাইজড এবং স্কেলেবল:
- ZeroMQ-এর PUB-SUB প্যাটার্ন ডিসেন্ট্রালাইজড, তাই একাধিক পাঠক সহজেই যুক্ত করা যায় এবং বড় আকারের সিস্টেমে এটি সহজে স্কেল করা যায়।
Publish/Subscribe মডেলে সংবাদ প্রচার সিস্টেমের উদাহরণ (ZeroMQ ব্যবহার করে)
এই উদাহরণে, আমরা একটি সংবাদ প্রকাশক (Publisher) তৈরি করব যা বিভিন্ন টপিকের সংবাদ পাঠাবে এবং সংবাদ পাঠক (Subscriber) তৈরি করব যা নির্দিষ্ট টপিক সাবস্ক্রাইব করবে এবং সেই টপিকের সংবাদ গ্রহণ করবে।
১. সংবাদ প্রকাশক (Publisher)
import zmq
import time
# ZeroMQ context তৈরি করা
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:5556") # TCP পোর্টে Publisher সকার চালু করা
# সংবাদ টপিক এবং কন্টেন্ট
news_topics = ["sports", "politics", "weather"]
news_content = {
"sports": "Sports News: Local team wins championship!",
"politics": "Politics News: New policies introduced in parliament.",
"weather": "Weather News: Heavy rain expected tomorrow."
}
while True:
for topic in news_topics:
message = f"{topic} {news_content[topic]}"
socket.send_string(message) # টপিক এবং সংবাদ পাঠানো
print(f"Published: {message}")
time.sleep(2) # প্রতি ২ সেকেন্ডে সংবাদ পাঠানো
২. সংবাদ পাঠক (Subscriber)
import zmq
# ZeroMQ context তৈরি করা
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:5556") # Publisher-এর সাথে সংযোগ
# নির্দিষ্ট টপিক সাবস্ক্রাইব করা (উদাহরণ: "sports" এবং "weather")
socket.setsockopt_string(zmq.SUBSCRIBE, "sports")
socket.setsockopt_string(zmq.SUBSCRIBE, "weather")
while True:
message = socket.recv_string()
print(f"Received: {message}")
এই উদাহরণে কীভাবে কাজ করে:
Publisher:
- সংবাদ প্রকাশক (Publisher) নির্দিষ্ট TCP পোর্টে চালু থাকে এবং প্রতিটি সংবাদ টপিক (যেমন
sports,politics,weather) নিয়ে একটি মেসেজ পাঠায়। - মেসেজে টপিকের নাম এবং সংবাদ কন্টেন্ট থাকে, যা পাঠকদের নির্দিষ্ট টপিক সাবস্ক্রাইব করতে সহায়ক করে।
Subscriber:
- সংবাদ পাঠক (Subscriber) নির্দিষ্ট পোর্টে Publisher-এর সাথে সংযুক্ত হয় এবং নির্দিষ্ট টপিক সাবস্ক্রাইব করে, যেমন
sportsএবংweather। - Subscriber শুধুমাত্র সেই টপিকের সংবাদ গ্রহণ করে যা সে সাবস্ক্রাইব করেছে। যদি কোনো টপিক সাবস্ক্রাইব না করা থাকে, তবে সেই টপিকের সংবাদ পাঠক গ্রহণ করবে না।
Publish/Subscribe মডেলে সংবাদ প্রচার সিস্টেমের সুবিধা
স্কেলেবিলিটি:
- একাধিক Subscriber সহজেই যুক্ত করা যায় এবং সিস্টেমের স্কেল বৃদ্ধি করা যায়।
লো লেটেন্সি মেসেজিং:
- ZeroMQ-এর PUB-SUB প্যাটার্ন দ্রুত মেসেজিং নিশ্চিত করে, যা সংবাদ প্রচারের জন্য উপযোগী।
টপিক-ভিত্তিক ফিল্টারিং:
- পাঠকরা নির্দিষ্ট টপিকের সংবাদ সাবস্ক্রাইব করতে পারে, ফলে শুধুমাত্র প্রাসঙ্গিক তথ্যই তারা পায়।
রিয়েল-টাইম নিউজ আপডেট:
- সংবাদ প্রকাশক নিয়মিত এবং রিয়েল-টাইমে সংবাদ পাঠায়, ফলে পাঠকরা সর্বশেষ সংবাদ আপডেট পায়।
Publish/Subscribe মডেলের সীমাবদ্ধতা
- নিরাপত্তার অভাব:
- ZeroMQ-এর PUB-SUB প্যাটার্নে ডিফল্টভাবে নিরাপত্তা ব্যবস্থা নেই। নিরাপত্তা নিশ্চিত করতে অতিরিক্ত ব্যবস্থা, যেমন ZAP (ZeroMQ Authentication Protocol) ব্যবহার করতে হয়।
- ব্রোকারবিহীন আর্কিটেকচার:
- PUB-SUB প্যাটার্নে কোনও ব্রোকার না থাকায় মেসেজ ডেলিভারি নিশ্চিত করা কঠিন হতে পারে। যদি কোনো Subscriber মিস করে, তবে সেই মেসেজ পুনরায় পাঠানো সম্ভব নয়।
উপসংহার
Publish/Subscribe মডেল ব্যবহার করে ZeroMQ-তে সংবাদ প্রচার সিস্টেম তৈরি করা অত্যন্ত কার্যকর এবং স্কেলেবল। ZeroMQ-এর PUB-SUB প্যাটার্ন ব্যবহার করে একাধিক পাঠক সহজেই বিভিন্ন টপিক সাবস্ক্রাইব করতে পারে এবং রিয়েল-টাইমে সংবাদ পেতে পারে। এটি দ্রুত এবং লো লেটেন্সি মেসেজিং সিস্টেম তৈরি করতে সহায়ক, যা বড় ডিস্ট্রিবিউটেড সিস্টেম এবং নিউজ আপডেট সিস্টেমের জন্য আদর্শ।
Read more